name: Publish

on:
  push:
    branches:
      {{#each branchPatterns}}
      - {{ . }}
      {{/each}}
  pull_request:
  workflow_dispatch:
  workflow_call:

jobs:
  build-and-upload:
    permissions:
      contents: read
      pages: read
    name: Build and Upload
    if: github.repository_owner == 'npm'
    runs-on: ubuntu-latest
    defaults:
      run:
        shell: bash
    steps:
      {{> stepsSetupYml }}
      - name: Rebuild deps
        run: npm rebuild

      - name: Setup Pages
        uses: actions/configure-pages@v4
      
      - name: Restore cache
        id: cache-gatsby
        uses: actions/cache/restore@v4
        with:
          key: $\{{ runner.os }}-gatsby-$\{{ github.ref_name }}
          path: |
            public
            .cache

      - name: Build documentation
        run: npm run build
        env:
          GITHUB_TOKEN: $\{{ secrets.GITHUB_TOKEN }}

      - name: Save cache
        uses: actions/cache/save@v4
        with:
          key: $\{{ steps.cache-gatsby.outputs.cache-primary-key }}
          path: |
            public
            .cache

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: './public'

  deploy:
    permissions:
      pages: write
      actions: read
      id-token: write
    environment:
      name: github-pages
      url: $\{{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build-and-upload
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4
        with:
          preview: $\{{ github.event_name == 'pull_request' }}
